home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Diamond Collection / The Diamond Collection (Software Vault)(Digital Impact).ISO / cdr42 / smixc111.zip / XMS.C < prev    next >
C/C++ Source or Header  |  1995-02-15  |  3KB  |  131 lines

  1. /*      SMIXC is Copyright 1995 by Ethan Brodsky.  All rights reserved      */
  2.  
  3. /* ██ XMS.C ███████████████████████████████████████████████████████████████ */
  4.  
  5. #pragma option -w- // Prevent "Function should return a value" warning
  6.  
  7.   int xms_installed(void);
  8.   void xms_init(void);
  9.  
  10.   unsigned int xms_getversion(void);
  11.   unsigned int xms_getfreemem(void);
  12.  
  13.   int xms_allocate(int far *handle, unsigned int size);
  14.   int xms_reallocate(int handle, unsigned int newsize);
  15.   int xms_free(int far *handle);
  16.  
  17.   typedef struct
  18.     {
  19.       unsigned long length;
  20.       unsigned int  sourcehandle;
  21.       unsigned long sourceoffset;
  22.       unsigned int  desthandle;
  23.       unsigned long destoffset;
  24.     } MOVEPARAMS;
  25.  
  26.   int xms_move(MOVEPARAMS far *params);
  27.  
  28. /* ████████████████████████████████████████████████████████████████████████ */
  29.  
  30. #include <mem.h>
  31.  
  32.   void far *xms_driver = NULL; /* Pointer to XMS driver (Set by xms_init()) */
  33.  
  34.   int xms_installed(void)
  35.     {
  36.       asm {
  37.         mov  ax, 0x4300
  38.         int  0x2F
  39.       }
  40.       if (_AL == 0x80)
  41.         return 1;
  42.       else
  43.         return 0;
  44.     }
  45.  
  46.   void xms_init()
  47.     {
  48.       asm {
  49.         mov  ax, 0x4310
  50.         int  0x2F
  51.         mov  word ptr [xms_driver], bx
  52.         mov  word ptr [xms_driver+2], es
  53.       }
  54.     }
  55.  
  56. /* ──────────────────────────────────────────────────────────────────────── */
  57.  
  58.   unsigned int xms_getversion()
  59.     {
  60.       asm {
  61.         mov  ah, 0x00
  62.         call [xms_driver]
  63.       }
  64.     }
  65.  
  66. /* ──────────────────────────────────────────────────────────────────────── */
  67.  
  68.   unsigned int xms_getfreemem()
  69.     {
  70.       asm {
  71.         mov  ah, 0x08
  72.         call [xms_driver]
  73.         mov  ax, dx
  74.       }
  75.     }
  76.  
  77. /* ════════════════════════════════════════════════════════════════════════ */
  78.  
  79.   int xms_allocate(int far *handle, unsigned int size)
  80.     {
  81.       asm {
  82.         mov  ah, 0x09
  83.         mov  dx, size
  84.         call [xms_driver]
  85.         les  di, [handle]
  86.         mov  es:[di], dx
  87.       }
  88.     }
  89.  
  90. /* ──────────────────────────────────────────────────────────────────────── */
  91.  
  92.   int xms_reallocate(int handle, unsigned int newsize)
  93.     {
  94.       asm {
  95.         mov  ah, 0x0F
  96.         mov  bx, newsize
  97.         mov  dx, handle
  98.         call [xms_driver]
  99.       }
  100.     }
  101.  
  102. /* ──────────────────────────────────────────────────────────────────────── */
  103.  
  104.   int xms_free(int far *handle)
  105.     {
  106.       asm {
  107.         mov  ah, 0x0A
  108.         les  di, [handle]
  109.         mov  dx, es:[di]
  110.         call [xms_driver]
  111.         mov  word ptr es:[di], 0
  112.       }
  113.     }
  114.  
  115. /* ════════════════════════════════════════════════════════════════════════ */
  116.  
  117.   int xms_move(MOVEPARAMS far *params)
  118.     {
  119.       asm {
  120.         push ds
  121.         mov  ah, 0x0B
  122.         lds  si, [params]
  123.         call [xms_driver]
  124.         pop  ds
  125.       }
  126.     }
  127.  
  128. /*██████████████████████████████████████████████████████████████████████████*/
  129.  
  130. #pragma option -w  // Re-enable "function should return a value" warning
  131.